var common = require("../../common/common.js");
var commonImage = require("../../common/commonImage.js");

var ks = {};
var appName = '快手极速版'

ks.openApp = function() {
    console.log('---打开快手---' + appName)
    var open = common.openApp(appName)
    console.log('---打开快手结果---' + open)
}

ks.checkLogin = function(isCheck) {
    if (!isCheck) return true;
    console.log('---检查是否登录---')
    // 确保已经加载完成
    common.threadJoin(function () {
        console.log("等待加载完成...");
        textContains("查看日历").waitFor();
    })
    console.log('---加载完成---')
    return !textContains("登录").exists()
}

ks.activeMoney = function() {
    ks.openApp()
    ks.reOpenActive(10000)
    ks.executeSign()
    ks.executeTreasureChest()
    ks.executeAppointment()
    ks.executeZeroBuy()
    ks.executeAd()
    // ks.executeVideo()
}

ks.openActive = function(timeout) {
    console.log('---点击[去赚钱]---')
    if (textContains("首页").exists() && textContains("朋友").exists()) {
        var money_bouds = common.findBoundsForReferenceLine('首页', 2, 1, 1).clickable().findOne();
        if (money_bouds) {
            money_bouds.click();
            common.sleep(timeout)
            commonImage.findImageAndClick("./img/ks/close_popup.png")
        }
    }
    return
}

ks.reOpenActive = function(timeout) {
    console.log('---重新打开活动页面---')
    // 重新打开活动页面
    while (true) {
        if (textContains("首页").exists() && textContains("朋友").exists()) {
            console.log('---重新打开活动页面---点击首页')
            click("首页")
            common.sleep(1000)
            ks.openActive(timeout)
            break
        } else {
            console.log('【reOpenActive】返回')
            back()
            common.sleep(1000)
            ks.closePopUp()
            common.sleep(4000)
            ks.openApp()
        }
    }
}

ks.closePopUp = function() {
    console.log('【关闭弹窗】开始')
    if (textContains("放弃").exists()) {
        textContains("放弃").click()
    }
    if (textContains("退出").exists()) {
        textContains("退出").click()
    }
    console.log('【关闭弹窗】结束')
}

ks.executeSign = function() {
    console.log('【签到】开始执行---')
    // mc = '^.*连续签到.*元.*$'
    // if (textMatches(mc).exists()) {
    //     click("立即签到")
    //     console.log('【连续签到】获取金币:成功  --￥￥')
    //     back()
    // }
    var res
    if (textContains("断签将无法得到最终大奖").exists()) {
        res = click("立即签到")
        console.log('【连续签到】弹窗 获取金币:成功  --￥￥')
        back()
    }
    if (textContains("立即签到").exists()) {
        // todo back()
        res = click("立即签到")
        console.log('【连续签到】获取金币:成功  --￥￥')
    }
    console.log('【签到】结果:' + (res ? '成功  --￥￥' : '失败'))
    if (res) {
        common.sleep(2000)
    }
}
ks.executeTreasureChest = function() {
    console.log('【开宝箱】开始执行---')
    mc = '^点可领.*金币$'
    if (textMatches(mc).exists()) {
        textMatches(mc).click()
        console.log('【开宝箱】成功 --￥￥')
        common.sleep(2000)
        var num = 0
        while (true) {
            num +=1
            if (num > 5) {
                break
            }
            var mc_hour_sign = "^.*看内容最高可得.*$"
            if (textMatches(mc_hour_sign).exists()) {
                textMatches(mc_hour_sign).click()
                console.log('【开宝箱】正在播放广告')
                adWaiting(-10)
            } else if (textContains("看内容最高可得").exists()) {
                textContains("看内容最高可得").click()
                console.log('【开宝箱】正在播放广告')
                adWaiting(-10)
            } else {
                break
            }
        }
    } else {
        console.log('【开宝箱】失败')
    }
    return true
}

ks.executeZeroBuy = function() {
    console.log('【连续打卡】开始执行---')
    mc = '连续打卡白拿'
    if (textContains(mc).exists()) {
        textContains(mc).click()
        textContains('去签到').click()
        back()
    } else {
        console.log('【连续打卡】失败')
    }
    return true
}

ks.executeAppointment = function() {
    console.log('【预约】开始执行---')
    mc = '^预约金币可领取.*$'
    if (textMatches(mc).exists()) {
        textMatches(mc).click()
        common.sleep(2000)
        console.log('【预约】点击一键领取')
        click("一键领取")
        common.sleep(2000)
        click("开心收下")
        common.sleep(2000)
        click("立即预约")
        back()
    }
    console.log('【预约】执行结束---')
    return true;
}

ks.executeAd = function() {
    console.log('【看广告】开始执行---')
    var mc = "^看广告.*金币.*$"
    var continuity_fail = 0
    for (var i = 0; i < 30; i++) {
        if (textMatches(mc).exists()) {
            continuity_fail = 0
            textMatches(mc).click()
            console.log('【看广告】正在播放广告：' + i)
            adWaiting(1)
        } else {
            continuity_fail += 1
            console.log('【看广告】失败, 不可以点击：' + i)
            common.sleep(2000)
        }
        if (continuity_fail >= 3) {
            console.log('【看广告】连续失败3次，重新打开活动界面')
            ks.reOpenActive()
        }
    }
}
function adWaiting(num) {
    var timeout = 35000
    console.log('【看广告】[adWaiting]睡眠一')
    common.sleep(timeout / 2)
    // var mc = "^.*点击额外获取.*金币.*$"
    // if (textMatches(mc).exists()) {
    //     console.log('【看广告】正在播放广告：点击额外获取')
    //     textMatches(mc).click()
    //     common.sleep(3000)
    //     //ks.openApp()
    // }
    if (textContains("更多直播").exists()) {
        console.log('【看广告】[adWaiting]直播间+30秒')
        common.sleep(30000)
    }
    console.log('【看广告】[adWaiting]睡眠二')
    common.sleep(timeout / 2)
    console.log('【看广告】获取金币成功--￥￥')
    // 返回赚钱页面
    back()
    // 再次检查
    adNext(num+1)
}
function adNext(num) {
    common.sleep(2000)
    console.log('【看广告】检查--[是否继续]-开始' + num)
    // 检查 -- 下一个视频
    if (textContains("领取奖励").exists()) {
        console.log('【看广告】检查--再看一个:' + num)
        if (num <= 5) {
            textContains("领取奖励").click()
            adWaiting(num)
            console.log('【看广告】检查--[结束]-观看成功' + num)
        } else {
            if (textContains("放弃奖励").exists()) {
                textContains("放弃奖励").click()
            }
            if (textContains("坚持退出").exists()) {
                textContains("坚持退出").click()
            }
            console.log('【看广告】检查--[结束] 超出循环次数退出')
        }
        return
    }
    // 检查 -- 点击奖励
    if (textContains("点击额外获取").exists()) {
        console.log('【看广告】检查--点击额外获取--放弃:' + num)
        textContains("放弃奖励").click()
        console.log('【看广告】检查--[结束] 点击额外获取:' + num)
        return
    }
    // 检查 -- 去完成任务
    if (textContains("去完成任务").exists()) {
        console.log('【看广告】检查--去完成任务')
        textContains("放弃奖励").click()
        console.log('【看广告】检查--[结束]去完成任务')
        // 赚钱页面
        return
    }
    // 检查 -- 直播间
    if (textContains("退出直播间").exists()) {
        console.log('【看广告】检查--退出直播间:' + num)
        // todo
        console.log(textContains("退出直播间").findOne())
        textContains("退出直播间").click()
        console.log('【看广告】检查--[结束] 退出直播间:' + num)
        return
    }
    // 检查 -- 猜你喜欢
    if (textContains("猜你喜欢").exists()) {
        console.log('【看广告】检查--[猜你喜欢]')
        textContains("退出").click()
        console.log('【看广告】[检查][结束]猜你喜欢')
        return
    }
    // 检查 -- 直播间是否观看结束
    if (textContains("继续观看").exists()) {
        console.log('【看广告】检查--[继续观看]')
        textContains("放弃奖励").click()
        console.log('【看广告】[检查][结束]继续观看')
        return
    }
    console.log('【看广告】检查--[结束] END' + num)
}

ks.executeVideo = function() {
    console.log('【看视频】')
    common.threadJoin(function () {
        var mc = "^看指定视频.*金币$"
        var timeout = 35000
        if (textMatches(mc).exists() && textMatches(mc).click()) {
            console.log('【看视频】正在播放广告')
            common.sleep(timeout)
            console.log('【看视频】获取金币成功')
            // 关闭弹窗
            back()
        } else {
            console.log('【看视频】失败, 不可以点击')
        }
    })
}

// ks.executeFan = function() {
//     console.log('【获得饭补】')
//     common.threadJoin(function () {
//         if (click("到饭点领饭补")) {
//             // 等待加载完成
//             textContains("看视频").waitFor();
//             var mc = "^领取饭补.*金币$"
//             if (textMatches(mc).exists()) {
//                 textMatches(mc).click()
//                 console.log('【获得饭补】获取金币成功')
//                 // 关闭弹窗
//                 back()
//             } else {
//                 console.log('【获得饭补】失败,不到领取时间')
//             }
//             back()
//         } else {
//             console.log('【获得饭补】失败')
//         }
//     })
// }

module.exports = ks;